Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
int visible_h;
int ctl_keys; /* Ctrl+Alt starts calibration */
+ int shift_keys; /* Shift / CapsLock keys */
};
#define DIRTY_PIXEL_BITS 64
} else if (down) {
int qemu_keysym = 0;
- if (sym <= 128) /* normal ascii */
+ if (sym <= 128) { /* normal ascii */
+ int shifted = vs->shift_keys == 1 || vs->shift_keys == 2;
qemu_keysym = sym;
- else {
+ if (sym >= 'a' && sym <= 'z' && shifted)
+ qemu_keysym -= 'a' - 'A';
+ } else {
switch (sym) {
case XK_Up: qemu_keysym = QEMU_KEY_UP; break;
case XK_Down: qemu_keysym = QEMU_KEY_DOWN; break;
vs->ctl_keys |= 2;
break;
+ case XK_Shift_L:
+ vs->shift_keys |= 1;
+ break;
+
default:
break;
}
vs->ctl_keys &= ~2;
break;
+ case XK_Shift_L:
+ vs->shift_keys &= ~1;
+ break;
+
+ case XK_Caps_Lock:
+ vs->shift_keys ^= 2;
+ break;
+
case XK_1 ... XK_9:
if ((vs->ctl_keys & 3) != 3)
break;